#include <iostream>
#include "multime.h"
#include <fstream>
using std::ifstream;
using std::ofstream;
using std::ios;
	ifstream in("cit.txt");
	ofstream out("scris.txt");
Multime::Multime(int p){
	i=-1;
	v[++i]=p;
}
void Multime::add(int p){
	v[++i]=p;
}
int Multime::getLen()const{return i;}
std::ostream& operator<<(std::ostream&out,const Multime& right){
	for(int j=0;j<=right.getLen();j++)
		out<<right.v[j]<<' ';
}
void Multime::afisareEcran(){
	for(int j=0;j<getLen();j++)
		std::cout<<v[j]<<' ';

}
void Multime::citireTastatura(){
	int n;
	std::cout<<"\nCate elemente introduceti\n";
	std::cin>>n;
	n=n+getLen();
	for(;i<n;)
		std::cin>>v[++i];
}
void Multime::citireFisier(){
	int n;
  while(!in.eof())
    {
            in>>v[++i];
    }
	    i--;
}
void Multime::afisareFisier(){
		for(int j=0;j<=getLen();++j)
			out<<v[j]<<' ';

}
void Multime::reuniune(Multime& b){
    int ok=1,n,k;

    for(int j=0;j<=b.getLen();++j)
    {
        ok=1;
        for(int ii=0;ii<=(n=getLen());ii++)
        if(b.v[j]==v[ii])
        {
            ok=0;
            break;
        }
    if (ok)
    {
        v[++i]=b.v[j];

    }
}

}
Multime::Multime(){}
void Multime::intersectie(Multime& b){
	int ii,j,k=-1,x;
	Multime inter;
	for(ii=0;ii<=getLen();ii++)
		{
			for(j=0;j<=b.getLen();j++)
					if(v[ii]==b.v[j])
						inter.v[++k]=v[ii];
		}
	std::cout<<"\nIntersectia= ";
	for(x=0;x<=inter.v[x]!='\0';x++)
		std::cout<<' '<<inter.v[x];
}
void Multime::diferenta(Multime& b){
	int ii,j,k=-1,x;
	Multime inter;
	for(ii=0;ii<=getLen();ii++)
		{
			for(j=0;j<=b.getLen();j++)
					if(v[ii]!=b.v[j])
						inter.v[++k]=v[ii];
		}
	std::cout<<"\nDiferenta= ";
	for(x=0;x<=inter.v[x]!='\0';x++)
		std::cout<<' '<<inter.v[x];
}
bool Multime::incluziune(Multime& b){
	int x=-1,ii,j;		
	for(ii=0;ii<=getLen();ii++)
		{
			for(j=0;j<=b.getLen();j++)
				if(v[ii]==b.v[j])
						++x;
		}
	if(x==getLen())
		return true;
	return false;
}
bool Multime::operator ==(Multime& right){
	int tt=0;
	if(getLen()!=right.getLen())
		return false;
	for(int x=0;x<=getLen();x++)
		{
			tt=0;
			for(int j=0;j<=getLen();j++)
					if(v[x]==right.v[j])
							tt=1;
			if(tt!=1)
				return false;
		}
	return true;
}
bool Multime::operator !=(Multime& right){
	int tt=0;
	if(getLen()!=right.getLen())
		return true;
	for(int x=0;x<=getLen();x++)
		{
			tt=0;
			for(int j=0;j<=getLen();j++)
					if(v[x]!=right.v[j])
							tt=1;
			if(tt!=1)
				return false;
		}
	return true;
}
void Multime::apartenenta(int val){
	int er=0;
	for (int ii=0;ii<=getLen();ii++)
		{
			if(v[ii]==val) 
				{
         er=1;				
				 std::cout<<"Multimea contine aceasta valoare!";
				 break;
				}
		}
		
	if(!er)
		{
			std::cout<<"Multimea nu contine aceasta valoare!";
		}
}

NMultimi::NMultimi(){}
NMultimi::NMultimi(Multime& b){
		index=-1;
		n[++index]=b;
}
void NMultimi::add(Multime& b){
		index=-1;
		n[++index]=b;
}
int NMultimi::getLenN()const{return index;}
void NMultimi::afisare(){

	for(int x=0;x<=getLenN();x++)
		std::cout<<'\n'<<n[x];
}
void NMultimi::reuniune(NMultimi& b){
    int ok=1,k;
    for(int j=0;j<=b.getLenN();++j)
    {
        ok=1;
        for(int ii=0;ii<=getLenN();ii++)
    	    if(b.n[j]==n[ii])
     		   {
      	      ok=0;
      	      break;
     		   }
   		 if (ok)
   		 {
 	 	    n[++index]=b.n[j];
   		 }
		}	
}
void NMultimi::intersectie(NMultimi &b){
	int ii,j,k=-1,x;
	NMultimi inter;
	for(ii=0;ii<=getLenN();ii++)
		{
			for(j=0;j<=b.getLenN();j++)
					if(n[ii]==b.n[j])
						inter.add(n[ii]);
		}
	std::cout<<"\nIntersectia= ";
	for(x=0;x<=inter.getLenN();x++)
		std::cout<<' '<<inter.n[x];
}
